package ljl.alg.wangzheng_camp.round1.hashmap;

import java.util.Arrays;
import java.util.BitSet;

public class _349_two_array_intersection {
    
    /**
     * 我这个办法不是特别好
     * */
    public int[] intersection2(int[] nums1, int[] nums2) {
        BitSet b1 = new BitSet();
        BitSet b2 = new BitSet();
        for (int i : nums1) {
            b1.set(i);
        }
        for (int i : nums2) {
            b2.set(i);
        }
        int[] res = new int[1000];
        int j = 0;
        for (int i = 0; i <= 1000; i++) {
            if (b1.get(i) && b2.get(i)) {
                res[j++] = i;
            }
        }
        return Arrays.copyOf(res, j);
    }
    
    /**
     * 排序 + 双指针，这个是我喜欢的解法
     * */
    public int[] intersection(int[] nums1, int[] nums2) {
        Arrays.sort(nums1);
        Arrays.sort(nums2);
        int len1 = nums1.length, len2 = nums2.length;
        int[] res = new int[len1 + len2];
        int size = 0, i = 0, j = 0;
        while (i < len1 && j < len2) {
            int v1 = nums1[i], v2 = nums2[j];
            if (v1 == v2) {
                if (size == 0 || res[size - 1] != v1) {
                    res[size++] = v1;
                }
                i++; j++;
            } else if (v1 > v2) {
                j++;
            } else {
                i++;
            }
        }
        return Arrays.copyOf(res, size);
    }
    
}
